package com.demo.spring.annoinit;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;

/**
 * 自定义Bean后处理器，复写postProcessBeforeInitialization和postProcessAfterInitialization2个方法，分别对应初始化前后时的操作。
 * @ClassName:MyBeanPostProcessor
 * @Description:自定义Bean后处理器
 * @date 2017年10月25日下午7:03:53
 */
@Component
public class MyBeanPostProcessor implements BeanPostProcessor {

	public MyBeanPostProcessor() {
		super();
		System.out.println("这是BeanPostProcessor实现类构造器！！");
	}

	/**
	 *
	 * @Description 初始化前，处理器
	 * @param bean
	 * @param beanName
	 * @return
	 * @throws BeansException
	 * @author diandian.zhang
	 * @date 2017年10月25日下午7:07:02
	 * @see org.springframework.beans.factory.config.BeanPostProcessor#postProcessBeforeInitialization(java.lang.Object,
	 *      java.lang.String)
	 */
	@Override
	public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
		if(beanName.equals("studentServiceImpl")){
			System.out.println("BeanPostProcessor接口方法postProcessBeforeInitialization对属性进行更改！beanName=" + beanName);
		}
		return bean;
	}

	/**
	 *
	 * @Description 初始化后，处理器
	 * @param bean
	 * @param beanName
	 * @return
	 * @throws BeansException
	 * @author diandian.zhang
	 * @date 2017年10月25日下午7:07:07
	 * @see org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization(java.lang.Object,
	 *      java.lang.String)
	 */
	@Override
	public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
		if(beanName.equals("studentServiceImpl")){
			System.out.println("BeanPostProcessor接口方法postProcessAfterInitialization对属性进行更改！beanName=" + beanName);
		}
		return bean;// 注意，如果返回null,后续BeanPostProcessor不会再执行
	}

}